Listas

Las listas son arreglos de datos. Se definen con corchetes, y pueden contener datos de distintos tipos (números enteros y flotantes, o también los tipos que veremos más abajo). Un ejemplo de una lista en Python es:


In [ ]:
li = [-5, 7, 4, 9, 1, 12, 2]

In [ ]:
li

La operación más importante que se hace con las listas es la extracción de sus elementos en distintas posiciones. Es muy importante tener en cuenta que las listas en Python siempre empiezan con el índice 0, como los arreglos de C y C++.


In [ ]:
li[0]

In [ ]:
li[3]

Lo bueno de las listas en Python es que si usamos un índice más grande que n-1, donde n es el total de elementos, Python nos da un error (en lugar de retornar basura de la memoria, como en C o C++)


In [ ]:
li[20]

Las listas son modificables, es decir, que sus elementos pueden modificarse de acuerdo a la siguiente sintaxis:


In [ ]:
li[0] = -100
li

Además pueden seleccionarse fácilmente subconjuntos de una lista, usando lo que se conoce como rebanado (o slicing en inglés), que consiste en usar dos índices separados por : al momento de tomar elementos de la lista. Al hacerlo, Python toma los elementos que van desde el primer índice hasta uno menos del último. Veamos un par de ejemplos:


In [ ]:
li[1:3]

In [ ]:
li[2:6]

El rebanado también funciona si se usa un sólo índice, bien sea el superior o el inferior, siempre que vaya acompañado de los :. En estos casos se obtiene el resultado que uno esperaría, es decir, que se tome desde el índice que uno quiera hasta el final:


In [ ]:
li[2:]

o lo opuesto: que la selección vaya desde el principio hasta un índice menos que el que se use como último:


In [ ]:
li[:4]

También es importante mencionar que la selección de elementos y el rebanado funcionan con índices negativos, así:


In [ ]:
li

In [ ]:
li[-1]

In [ ]:
li[-3:]

Empleando esta notación, es posible también invertir el orden de los elementos de una lista


In [ ]:
li[::-1]

Nota: En general la notación de rebanado en Python es de la forma [a:b:c], dónde se toman los elementos de la lista, iniciando en a, hasta b-1 en pasos de c. Por ejemplo, de esta forma es posible tomar los elementos de una lista que se encuentran en índices pares:


In [ ]:
li[::2]

Finalmente cabe decir que se pueden usar las operaciones aritméticas + para concatenar dos listas, y * para repetir varias veces los elementos de una lista, así:


In [ ]:
[0, 4, 7] + [2, 3]

In [ ]:
[0] * 4

Ordenamiento

Para ordenar los elementos de una lista en Python, existen dos funciones principales que se pueden emplear, la diferencia entre las dos radica en el resultado obtenido tras la ejecución.

En este caso, la función sorted() retorna una nueva lista que contiene los elementos de la lista original de forma ordenada, mientras que la función list.sort() ordena los elementos de la lista original, modificando su contenido. Por ejemplo:


In [ ]:
example_list = [-1, 0, 100, -29, 2, 3, 6]

A continuación ordenaremos la lista, retornando una nueva lista que contiene los elementos ordenados:


In [ ]:
ordered_list = sorted(example_list)
ordered_list

Ahora, ordenaremos la lista alterando el orden de los elementos en la lista original:


In [ ]:
example_list.sort()
example_list

Problemas

Problema 1

Construir una lista que tenga 100 repeticiones de los números -1, 0 y 1, en ese orden exacto.


In [ ]:
# Escribir la solución aquí

Problema 2

Construir una lista que tenga un 1 rodeado de dos listas, cada una con 20 ceros.


In [ ]:
# Escribir la solución aquí

Problema 3

Calcular el promedio de la siguiente lista:


In [ ]:
li = [3, 18, 17, 44, 14, 12, 29, 19, 4, 6, 17, 7, 14, 6, 8, 17, 17, 21, 65,\
      19, 10, 31, 92, 17, 5, 15, 3, 14, 20, 12, 29, 57, 15, 2, 17, 1, 6, 17, 2,\
      71, 12, 11, 62, 14, 9, 20, 43, 19, 4, 15]

Respuesta:

20.04

Nota: Usar el comando sum(li) para obtener la suma de los elementos de la lista, y el comando len(li) para obtener cuantos elementos tiene.


In [ ]:
# Escribir la solución aquí

Problema 4

La media móvil es un concepto usado en economía para tratar de observar si existe una tendencia al alza o a la baja en los precios de las acciones de una empresa. Para ello, lo que hace es crear una serie de promedios de distintos subconjuntos del conjunto de datos original.

Por ejemplo, si en siete días las acciones de una empresa tuvieron los siguientes precios:

Precios: 11, 12, 13, 14, 15, 16, 17

Podemos calcular la media móvil, en periodos de cinco días, de la siguiente forma:

Primera media móvil de 5 días: (11 + 12 + 13 + 14 + 15) / 5 = 13

Segunda media móvil de 5 días: (12 + 13 + 14 + 15 + 16) / 5 = 14

Tercera media móvil de 5 días: (13 + 14 + 15 + 16 + 17) / 5 = 15

Con esta descripción, encontrar de la cuarta, séptima y décima medias móviles, en periodos de 10 días, para los siguientes precios de las acciones de Intel registrados entre el 24 de Marzo y el 5 de Mayo de 2010:


In [ ]:
intel = [22.27, 22.19, 22.08, 22.17, 22.18, 22.13, 22.23, 22.43, 22.24,\
         22.29, 22.15, 22.39, 22.38, 22.61, 23.36, 24.05, 23.75, 23.83, 23.95,\
         23.63, 23.82, 23.87, 23.65, 23.19, 23.10, 23.33, 22.68, 23.10, 22.40,\
         22.17]

Respuesta:

22.259, 22.613, 23.076

Nota: Utilizar las operaciones de rebanado descritas arriba.

El material de este notebook fue recopilado para Clubes de Ciencia Colombia 2017 por Luis Henry Quiroga (GitHub: lhquirogan) - Germán Chaparro (GitHub: saint-germain), y fue adaptado de https://github.com/PythonBootcampUniandes